package org.eiahe.hr.salary.service;

import org.eiahe.hr.salary.domain.bo.BonusCalculationBo;
import org.eiahe.hr.salary.domain.vo.BonusCalculationVo;
import org.ehe.common.mybatis.core.page.PageQuery;
import org.ehe.common.mybatis.core.page.TableDataInfo;

import java.util.List;

/**
 * 奖金核算Service接口
 *
 * @author ${author}
 * @date 2023-05-24
 */
public interface IBonusCalculationService {

    /**
     * 查询奖金核算
     *
     * @param calculationId 核算ID
     * @return 奖金核算
     */
    BonusCalculationVo queryById(Long calculationId);

    /**
     * 根据奖金发放ID查找核算记录
     *
     * @param paymentId 奖金发放ID
     * @return 奖金核算记录
     */
    BonusCalculationVo queryByPaymentId(Long paymentId);

    /**
     * 查询奖金核算列表
     *
     * @param bo 奖金核算业务对象
     * @return 奖金核算集合
     */
    List<BonusCalculationVo> queryList(BonusCalculationBo bo);

    /**
     * 分页查询奖金核算列表
     *
     * @param bo        奖金核算业务对象
     * @param pageQuery 分页参数
     * @return 奖金核算分页数据
     */
    TableDataInfo<BonusCalculationVo> queryPageList(BonusCalculationBo bo, PageQuery pageQuery);

    /**
     * 新增奖金核算
     *
     * @param bo 奖金核算业务对象
     * @return 是否成功
     */
    Boolean insertByBo(BonusCalculationBo bo);

    /**
     * 修改奖金核算
     *
     * @param bo 奖金核算业务对象
     * @return 是否成功
     */
    Boolean updateByBo(BonusCalculationBo bo);

    /**
     * 删除奖金核算
     *
     * @param calculationIds 核算IDs
     * @return 是否成功
     */
    Boolean deleteWithValidByIds(Long[] calculationIds);

    /**
     * 处理工作流审核通过
     *
     * @param calculationId 核算ID
     * @return 是否成功
     */
    Boolean handleWorkflowApprove(Long calculationId);

    /**
     * 处理工作流审核拒绝
     *
     * @param calculationId 核算ID
     * @return 是否成功
     */
    Boolean handleWorkflowReject(Long calculationId);

    /**
     * 发放奖金
     *
     * @param calculationId 核算ID
     * @return 是否成功
     */
    Boolean payBonus(Long calculationId);
}